/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode * temp,*res;
        res = temp = NULL;
        ListNode * tag1,*tag2;
        tag1 = l1;
        tag2 = l2;
        int num1,num2,add,temp_sum;
        add=0;
        while(tag1!=NULL || tag2!=NULL)
        {
            if(tag1==NULL) num1=0; else num1=tag1->val;
            if(tag2==NULL) num2=0; else num2=tag2->val;
            temp_sum = num1+num2+add;
            add = temp_sum/10;
            if(res==NULL) res = temp = new ListNode(temp_sum%10) ;
            else 
            {
                temp->next = new ListNode(temp_sum%10);
                temp=temp->next;
            }
            if (tag1!=NULL) tag1=tag1->next;
            if (tag2!=NULL) tag2=tag2->next;
        }
        if(add!=0)
        {
           temp->next = new ListNode(add); 
        }
        return res;
    }
};
